{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ![](https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/img/index/logo.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 机器学习集训营第五期 [@Julyedu.com七月在线 ](http://www.julyedu.com)\n",
    "### 第二阶段：数据处理\n",
    "#### 第一课  Pandas基础\n",
    "\n",
    "##### David@七月在线 2018-8-6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pandas是一个专门用于数据分析的python library"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 目录\n",
    "- Series\n",
    "- DataFrame\n",
    "- Index\n",
    "- 文件读写"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## [Pandas](http://pandas.pydata.org/)简介\n",
    "- python数据分析library\n",
    "- 基于numpy (对ndarray的操作)\n",
    "- 有一种用python做Excel/SQL/R的感觉"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据结构Series\n",
    "\n",
    "### 2018七月在线 机器学习集训营 julyedu.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 构造和初始化Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n",
      "/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Series是一个一维的数据结构，下面是一些初始化Series的方法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 3)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "a = np.array([[1, 2, 3], [4, 5, 6]]);\n",
    "a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.random.random((2, 2))\n",
    "\n",
    "a.astype(\"float\").dtype\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    P\n",
       "1    a\n",
       "2    n\n",
       "3    d\n",
       "4    a\n",
       "5    s\n",
       "6    !\n",
       "dtype: object"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(list('Pandas!'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list1=[1,2,3,4,5,6]\n",
    "list1[5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0                 7\n",
       "1           Beijing\n",
       "2              2.17\n",
       "3           3.14159\n",
       "4    Happy Birthday\n",
       "dtype: object"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([7, \"Beijing\", 2.17, 3.1415926, \"Happy Birthday\"])\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "num                     7\n",
       "address           Beijing\n",
       "float1               2.17\n",
       "pi                3.14159\n",
       "hb         Happy Birthday\n",
       "dtype: object"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1=pd.Series([7, \"Beijing\", 2.17, 3.1415926, \"Happy Birthday\"],index=['num','address','float1','pi','hb'])\n",
    "s1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.1415926"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1[0]#数字默认索引访问\n",
    "s1['pi']#自定义索引访问"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0          7\n",
       "1    Beijing\n",
       "2       2.17\n",
       "dtype: object"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(s[0:3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pandas会默认用0到n-1来作为Series的index，但是我们也可以自己指定index。index我们可以把它理解为dict里面的key。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A                 7\n",
       "B           Beijing\n",
       "C              2.17\n",
       "D           3.14159\n",
       "E    Happy Birthday\n",
       "Name: price, dtype: object"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([7, \"Beijing\", 2.17, 3.1415926, \"Happy Birthday\"], \n",
    "             index=[\"A\", \"B\", \"C\", \"D\", \"E\"], name=\"price\")\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "s[\"D\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "还可以用dictionary来构造一个Series，因为Series本来就是key value pairs。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      57229.83\n",
       "Guangzhou    55400.00\n",
       "Hangzhou     49470.00\n",
       "Shanghai     58987.96\n",
       "Shenzhen     53243.00\n",
       "Suzhou            NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#2017数据,你懂的\n",
    "cities = {\"Beijing\":57229.83 , \"Shanghai\": 58987.96, \"Shenzhen\": 53243, \"Hangzhou\": 49470, \"Guangzhou\": 55400, \"Suzhou\": None}\n",
    "avg_incomes = pd.Series(cities, name=\"pingjunshouru\")\n",
    "avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(avg_incomes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "numpy ndarray构建一个Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['a', 'b', 'c', 'd', 'e']"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(\"abcde\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    1.506058\n",
       "b    1.014884\n",
       "c    0.841806\n",
       "d    0.048947\n",
       "e   -0.128305\n",
       "dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randn(5),index=list(\"abcde\"))\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### row_id,primary key"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 选择数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以像对待一个list一样对待Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Suzhou            NaN\n",
       "Beijing      57229.83\n",
       "Guangzhou    55400.00\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[[5,0,1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Shanghai    58987.96\n",
       "Shenzhen    53243.00\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[3:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      57229.83\n",
       "Guangzhou    55400.00\n",
       "Hangzhou     49470.00\n",
       "Shanghai     58987.96\n",
       "Shenzhen     53243.00\n",
       "Suzhou            NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3, 4, 5, 2, 3, 4, 5, 6]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = [1,2,3,4,5]\n",
    "b = [2,3,4,5,6]\n",
    "a+b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#索引对齐"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Guangzhou          NaN\n",
       "Hangzhou           NaN\n",
       "Shanghai     117975.92\n",
       "Shenzhen     106486.00\n",
       "Suzhou             NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[1:5]+avg_incomes[3:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Guangzhou    55400.00\n",
       "Hangzhou     49470.00\n",
       "Shanghai     58987.96\n",
       "Shenzhen     53243.00\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[1:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Shanghai    58987.96\n",
       "Shenzhen    53243.00\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[3:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 为什么下面这样会拿到NaN呢？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Series就像一个dict，前面定义的index就是用来选择数据的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "57229.83"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[0]\n",
    "avg_incomes[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Shanghai    58987.96\n",
       "Hangzhou    49470.00\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[[\"Hangzhou\", \"Beijing\", \"Shenzhen\"]]\n",
    "avg_incomes[[3,2,5]]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"Shanghai\" in avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"Chongqing\" in avg_incomes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "比较安全的用key读取value的方法如下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "58987.96\n"
     ]
    }
   ],
   "source": [
    "print(avg_incomes.get(\"avg_incomes\", 0))\n",
    "print(avg_incomes.get(\"Shanghai\",0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'Chongqing'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_value\u001b[0;34m(self, series, key)\u001b[0m\n\u001b[1;32m   3123\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3124\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mlibindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_value_box\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3125\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.get_value_box\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.get_value_box\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: 'str' object cannot be interpreted as an integer",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-25-655d56407746>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mavg_incomes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Chongqing'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m    765\u001b[0m         \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    766\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 767\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    768\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    769\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_value\u001b[0;34m(self, series, key)\u001b[0m\n\u001b[1;32m   3130\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mInvalidIndexError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3131\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3132\u001b[0;31m                     \u001b[0;32mraise\u001b[0m \u001b[0me1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3133\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m  \u001b[0;31m# pragma: no cover\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3134\u001b[0m                 \u001b[0;32mraise\u001b[0m \u001b[0me1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_value\u001b[0;34m(self, series, key)\u001b[0m\n\u001b[1;32m   3116\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3117\u001b[0m             return self._engine.get_value(s, k,\n\u001b[0;32m-> 3118\u001b[0;31m                                           tz=getattr(series.dtype, 'tz', None))\n\u001b[0m\u001b[1;32m   3119\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3120\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minferred_type\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'integer'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'boolean'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'Chongqing'"
     ]
    }
   ],
   "source": [
    "avg_incomes['Chongqing']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面这种写法，如果key不存在，就可能会报错了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "type(avg_incomes < 50000)\n",
    "av1=avg_incomes > 52000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      57229.83\n",
       "Guangzhou    55400.00\n",
       "Hangzhou     49470.00\n",
       "Shanghai     58987.96\n",
       "Shenzhen     53243.00\n",
       "Suzhou            NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "av1\n",
    "avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      57229.83\n",
       "Guangzhou    55400.00\n",
       "Shanghai     58987.96\n",
       "Shenzhen     53243.00\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[av1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "avg_incomes.median()\n",
    "a2=avg_incomes > 55400"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "avg_incomes[a2]=80000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      80000.0\n",
       "Guangzhou    55400.0\n",
       "Hangzhou     49470.0\n",
       "Shanghai     80000.0\n",
       "Shenzhen     53243.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面我再详细展示一下这个boolean indexing是如何工作的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'>\n"
     ]
    }
   ],
   "source": [
    "less_than_50000 = avg_incomes < 50000\n",
    "less_than_50000\n",
    "print(type(less_than_50000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Hangzhou    49470.0\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[less_than_50000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Series元素赋值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Series的元素可以被赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      80000.0\n",
       "Guangzhou    55400.0\n",
       "Hangzhou     49470.0\n",
       "Shanghai     80000.0\n",
       "Shenzhen     80000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[\"Shenzhen\"] = 80000\n",
    "avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      80000.0\n",
       "Guangzhou    55400.0\n",
       "Hangzhou     50000.0\n",
       "Shanghai     80000.0\n",
       "Shenzhen     80000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes[avg_incomes < 50000] = 50000\n",
    "avg_incomes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "前面讲过的boolean indexing在赋值的时候也可以用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数学运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面我们来讲一些基本的数学运算。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "#很弱的List运算功能\n",
    "list1=[2,4,6,8,10]\n",
    "# list1/2\n",
    "# # list1*3\n",
    "# # list1+50"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      6666.666667\n",
       "Guangzhou    4616.666667\n",
       "Hangzhou     4166.666667\n",
       "Shanghai     6666.666667\n",
       "Shenzhen     6666.666667\n",
       "Suzhou               NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes /12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      160000.0\n",
       "Guangzhou    110800.0\n",
       "Hangzhou     100000.0\n",
       "Shanghai     160000.0\n",
       "Shenzhen     160000.0\n",
       "Suzhou            NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes * 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      90000.0\n",
       "Guangzhou    65400.0\n",
       "Hangzhou     60000.0\n",
       "Shanghai     90000.0\n",
       "Shenzhen     90000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes + 10000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      6.400000e+09\n",
       "Guangzhou    3.069160e+09\n",
       "Hangzhou     2.500000e+09\n",
       "Shanghai     6.400000e+09\n",
       "Shenzhen     6.400000e+09\n",
       "Suzhou                NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      5.120000e+14\n",
       "Guangzhou    1.700315e+14\n",
       "Hangzhou     1.250000e+14\n",
       "Shanghai     5.120000e+14\n",
       "Shenzhen     5.120000e+14\n",
       "Suzhou                NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pow(avg_incomes,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "numpy的运算可以被运用到pandsa上去"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们再定义一个新的Series做加法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      24000.0\n",
       "Guangzhou    16620.0\n",
       "Hangzhou     15000.0\n",
       "Shanghai     24000.0\n",
       "Shenzhen     24000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#2017数据\n",
    "free_incomes = avg_incomes*0.3\n",
    "\n",
    "free_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      80000.0\n",
       "Guangzhou    55400.0\n",
       "Hangzhou     50000.0\n",
       "Shanghai     80000.0\n",
       "Shenzhen     80000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      56000.0\n",
       "Guangzhou    38780.0\n",
       "Hangzhou     35000.0\n",
       "Shanghai     56000.0\n",
       "Shenzhen     56000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_incomes - free_incomes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据缺失\n",
    "\n",
    "[reference](https://pandas.pydata.org/pandas-docs/stable/missing_data.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"ChengDu\" in free_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      24000.0\n",
       "Guangzhou    16620.0\n",
       "Hangzhou     15000.0\n",
       "Shanghai     24000.0\n",
       "Shenzhen     24000.0\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "free_incomes[free_incomes.notnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      24000.0\n",
       "Guangzhou    16620.0\n",
       "Hangzhou     15000.0\n",
       "Shanghai     24000.0\n",
       "Shenzhen     24000.0\n",
       "Suzhou           NaN\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "free_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      False\n",
       "Guangzhou    False\n",
       "Hangzhou     False\n",
       "Shanghai     False\n",
       "Shenzhen     False\n",
       "Suzhou        True\n",
       "Name: pingjunshouru, dtype: bool"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "free_incomes.isnull()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "#缺失值填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Beijing      24000.0\n",
       "Guangzhou    16620.0\n",
       "Hangzhou     15000.0\n",
       "Shanghai     24000.0\n",
       "Shenzhen     24000.0\n",
       "Suzhou       20724.0\n",
       "Name: pingjunshouru, dtype: float64"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "free_incomes[free_incomes.isnull()] = free_incomes.mean()\n",
    "free_incomes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据结构[Dataframe](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html)\n",
    "\n",
    "### 七月在线 julyedu.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一个Dataframe就是一张表格，Series表示的是一维数组，Dataframe则是一个二维数组，可以类比成一张excel的spreadsheet。也可以把Dataframe当做一组Series的集合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 创建一个DataFrame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 从Series构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "pd.DataFrame(avg_incomes)#avg_incomes有用处了吧~~"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "### dataframe就是由一列一列的series组合而成的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### dataframe可以由一个dictionary构造得到。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Shenzhen</td>\n",
       "      <td>700</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Hangzhou</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Chongqing</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        city  population  year\n",
       "0    Beijing        2100  2016\n",
       "1   Shanghai        2300  2017\n",
       "2  Guangzhou        1000  2016\n",
       "3   Shenzhen         700  2017\n",
       "4   Hangzhou         500  2016\n",
       "5  Chongqing         500  2016"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = {'city':['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],\n",
    "       'year': [2016,2017,2016,2017,2016,2016],\n",
    "       'population': [2100, 2300, 1000, 700, 500, 500]}\n",
    "df=pd.DataFrame(data)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Shenzhen</td>\n",
       "      <td>700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Hangzhou</td>\n",
       "      <td>500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Chongqing</td>\n",
       "      <td>500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        city  population\n",
       "0    Beijing        2100\n",
       "1   Shanghai        2300\n",
       "2  Guangzhou        1000\n",
       "3   Shenzhen         700\n",
       "4   Hangzhou         500\n",
       "5  Chongqing         500"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[['city','population']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "columns的名字和顺序可以指定"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>year</th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016</td>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2017</td>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016</td>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2017</td>\n",
       "      <td>Shenzhen</td>\n",
       "      <td>700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016</td>\n",
       "      <td>Hangzhou</td>\n",
       "      <td>500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2016</td>\n",
       "      <td>Chongqing</td>\n",
       "      <td>500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   year       city  population\n",
       "0  2016    Beijing        2100\n",
       "1  2017   Shanghai        2300\n",
       "2  2016  Guangzhou        1000\n",
       "3  2017   Shenzhen         700\n",
       "4  2016   Hangzhou         500\n",
       "5  2016  Chongqing         500"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(data, columns=[\"year\", \"city\", \"population\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "frame = pd.DataFrame(data, columns=[\"year\", \"city\", \"population\", \"debt\"],\n",
    "            index=[\"one\", \"two\", \"three\", \"four\", \"five\", \"six\"])\n",
    "frame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "也可以从几个Series构建一个DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>avg_incomes</th>\n",
       "      <th>free_incomes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Beijing</th>\n",
       "      <td>57229.83</td>\n",
       "      <td>17168.9490</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Guangzhou</th>\n",
       "      <td>55400.00</td>\n",
       "      <td>16620.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hangzhou</th>\n",
       "      <td>49470.00</td>\n",
       "      <td>14841.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Shanghai</th>\n",
       "      <td>58987.96</td>\n",
       "      <td>17696.3880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Shenzhen</th>\n",
       "      <td>53243.00</td>\n",
       "      <td>15972.9000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Suzhou</th>\n",
       "      <td>NaN</td>\n",
       "      <td>16459.8474</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           avg_incomes  free_incomes\n",
       "Beijing       57229.83    17168.9490\n",
       "Guangzhou     55400.00    16620.0000\n",
       "Hangzhou      49470.00    14841.0000\n",
       "Shanghai      58987.96    17696.3880\n",
       "Shenzhen      53243.00    15972.9000\n",
       "Suzhou             NaN    16459.8474"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"avg_incomes\": avg_incomes, \"free_incomes\": free_incomes})\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "也可以用一个list of dicts来构建DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "data = [{\"July\": 999999, \"lin\": 50000, \"david\": 1000}, {\"July\": 90000, \"lin\": 8000, \"david\": 200}, {\"July\": 90000, \"lin\": 8000}]\n",
    "\n",
    "\n",
    "df1=pd.DataFrame(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Chu</th>\n",
       "      <th>Han</th>\n",
       "      <th>July</th>\n",
       "      <th>david</th>\n",
       "      <th>lin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1000.0</td>\n",
       "      <td>50000.0</td>\n",
       "      <td>999999</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>90000</td>\n",
       "      <td>200.0</td>\n",
       "      <td>8000.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Chu      Han    July  david     lin\n",
       "0  1000.0  50000.0  999999    NaN     NaN\n",
       "1     NaN      NaN   90000  200.0  8000.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = [{\"July\": 999999, \"Han\": 50000, \"Chu\": 1000}, {\"July\": 90000, \"lin\": 8000, \"david\": 200}]\n",
    "pd.DataFrame(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "#pd.DataFrame(data, index=[\"salary\", \"bonux\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'avg_incomes'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3077\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3078\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-70-6499ed7cc1e1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'avg_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2686\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2687\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2688\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2690\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2693\u001b[0m         \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2694\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2695\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2696\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2697\u001b[0m         \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m   2487\u001b[0m         \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2488\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2489\u001b[0;31m             \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2490\u001b[0m             \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2491\u001b[0m             \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m   4113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4114\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4115\u001b[0;31m                 \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4116\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4117\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3078\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3080\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3081\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3082\u001b[0m         \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'"
     ]
    }
   ],
   "source": [
    "type(df['avg_incomes'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'free_incomes'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3077\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3078\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'free_incomes'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-71-72ce52affe49>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"free_incomes\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2686\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2687\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2688\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2690\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2693\u001b[0m         \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2694\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2695\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2696\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2697\u001b[0m         \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m   2487\u001b[0m         \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2488\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2489\u001b[0;31m             \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2490\u001b[0m             \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2491\u001b[0m             \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m   4113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4114\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4115\u001b[0;31m                 \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4116\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4117\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3078\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3080\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3081\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3082\u001b[0m         \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'free_incomes'"
     ]
    }
   ],
   "source": [
    "df[\"free_incomes\"]*100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'avg_incomes'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3077\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3078\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-72-d4b92101e61a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'cost_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'avg_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'free_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2686\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2687\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2688\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2690\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2693\u001b[0m         \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2694\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2695\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2696\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2697\u001b[0m         \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m   2487\u001b[0m         \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2488\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2489\u001b[0;31m             \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2490\u001b[0m             \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2491\u001b[0m             \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m   4113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4114\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4115\u001b[0;31m                 \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4116\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4117\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3078\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3080\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3081\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3082\u001b[0m         \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'"
     ]
    }
   ],
   "source": [
    "df['cost_incomes']=df['avg_incomes']-df['free_incomes']\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'avg_incomes'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3077\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3078\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-73-6060552b5671>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'avg_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2686\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2687\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2688\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2690\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2693\u001b[0m         \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2694\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2695\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2696\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2697\u001b[0m         \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m   2487\u001b[0m         \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2488\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2489\u001b[0;31m             \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2490\u001b[0m             \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2491\u001b[0m             \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m   4113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4114\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4115\u001b[0;31m                 \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4116\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4117\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3078\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3079\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3080\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3081\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3082\u001b[0m         \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'avg_incomes'"
     ]
    }
   ],
   "source": [
    "df['avg_incomes']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Shenzhen</td>\n",
       "      <td>700</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Hangzhou</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Chongqing</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        city  population  year\n",
       "0    Beijing        2100  2016\n",
       "1   Shanghai        2300  2017\n",
       "2  Guangzhou        1000  2016\n",
       "3   Shenzhen         700  2017\n",
       "4   Hangzhou         500  2016\n",
       "5  Chongqing         500  2016"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "loc方法可以拿到行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        city  population  year\n",
       "0    Beijing        2100  2016\n",
       "1   Shanghai        2300  2017\n",
       "2  Guangzhou        1000  2016"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "\"['avg_incomes'] not in index\"",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-77-46c8c2ec4a05>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'avg_incomes'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2680\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mIndex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2681\u001b[0m             \u001b[0;31m# either boolean or fancy integer index\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2682\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2683\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2684\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_frame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_array\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2724\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2725\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2726\u001b[0;31m             \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_convert_to_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2727\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2728\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_convert_to_indexer\u001b[0;34m(self, obj, axis, is_setter)\u001b[0m\n\u001b[1;32m   1325\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1326\u001b[0m                     raise KeyError('{mask} not in index'\n\u001b[0;32m-> 1327\u001b[0;31m                                    .format(mask=objarr[mask]))\n\u001b[0m\u001b[1;32m   1328\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1329\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_values_from_object\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: \"['avg_incomes'] not in index\""
     ]
    }
   ],
   "source": [
    "df[['avg_incomes']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['avg_incomes']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df[['avg_incomes','cost_incomes']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df[['avg_incomes','cost_incomes']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 下面这种方法默认用来选列而不是选行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "iloc方法可以拿到行和列，把pandas dataframe当做numpy的ndarray来操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.iloc[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.iloc[0:3,1:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFrame元素赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.loc[[\"Beijing\", \"Shanghai\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以给一整列赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df[\"debt\"] = 10000000000\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "frame.loc[\"six\"] = np.NaN\n",
    "frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for name in frame.columns:\n",
    "    print(name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "np.arange(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "frame.debt = np.arange(6) * 10000000\n",
    "frame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "还可以用Series来指定需要修改的index以及相对应的value，没有指定的默认用NaN."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "val = pd.Series([100, 200, 300], index=['two', 'three', 'four'])\n",
    "val * 10000\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "frame[\"debt\"] = val * 10000\n",
    "frame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果我们想要知道有哪些列，直接用columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "行的话就叫做index啦"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一个DataFrame就和一个numpy 2d array一样，可以被转置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "指定index的顺序，以及使用切片初始化数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Beijing</th>\n",
       "      <th>Shanghai</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015</th>\n",
       "      <td>2110</td>\n",
       "      <td>2400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016</th>\n",
       "      <td>2100</td>\n",
       "      <td>2500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017</th>\n",
       "      <td>2200</td>\n",
       "      <td>2600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Beijing  Shanghai\n",
       "2015     2110      2400\n",
       "2016     2100      2500\n",
       "2017     2200      2600"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "pop = {'Beijing': {2016: 2100,2015:2110, 2017:2200},\n",
    "      'Shanghai': {2015:2400, 2016:2500, 2017:2600}}\n",
    "s=pd.DataFrame(pop)\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.DataFrame?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们还可以指定index的名字和列的名字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'frame' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-82-cab822e5a041>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"number\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"columns\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mframe\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'frame' is not defined"
     ]
    }
   ],
   "source": [
    "df.index.name = \"number\"\n",
    "df.columns.name = \"columns\"\n",
    "frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(df.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.5/dist-packages/ipykernel_launcher.py:1: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(df.as_matrix())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Index\n",
    "### 2018七月在线 机器学习集训营  julyedu.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### index object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.indexes.base.Index"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj = pd.Series(range(3), index=[\"a\", \"b\", \"c\"])\n",
    "index = obj.index\n",
    "type(index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['b', 'c'], dtype='object')"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index[1:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "index的值是不能被更改的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# index[1] = 'd'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Int64Index([1, 2, 3], dtype='int64')"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.Index(np.arange(1,4))\n",
    "index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    2\n",
       "2    5\n",
       "3    7\n",
       "dtype: int64"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj2 = pd.Series([2,5,7], index=index)\n",
    "obj2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj2.index is index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj2.index is np.arange(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj2.index == np.arange(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Beijing</th>\n",
       "      <th>Shanghai</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015</th>\n",
       "      <td>2110</td>\n",
       "      <td>2400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016</th>\n",
       "      <td>2100</td>\n",
       "      <td>2500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017</th>\n",
       "      <td>2200</td>\n",
       "      <td>2600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Beijing  Shanghai\n",
       "2015     2110      2400\n",
       "2016     2100      2500\n",
       "2017     2200      2600"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pop\n",
    "frame3 = pd.DataFrame(pop)\n",
    "frame3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "print(\"Shanghai\" in frame3.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2015 in frame3.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 针对index进行索引和切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj[\"b\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认的数字index依旧可以使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b    1\n",
       "c    2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj[[1,2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj[obj<1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面介绍如何对Series进行切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b    1\n",
       "c    2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj[\"b\":\"c\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b    1\n",
       "c    2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj[\"b\":]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对DataFrame进行Indexing与Series基本相同"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>columns</th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>number</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Guangzhou</td>\n",
       "      <td>1000</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Shenzhen</td>\n",
       "      <td>700</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Hangzhou</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Chongqing</td>\n",
       "      <td>500</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "columns       city  population  year\n",
       "number                              \n",
       "0          Beijing        2100  2016\n",
       "1         Shanghai        2300  2017\n",
       "2        Guangzhou        1000  2016\n",
       "3         Shenzhen         700  2017\n",
       "4         Hangzhou         500  2016\n",
       "5        Chongqing         500  2016"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "\"['avg_incomes' 'cost_incomes'] not in index\"",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-114-2b0d28a0a619>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"avg_incomes\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"cost_incomes\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2680\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mIndex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2681\u001b[0m             \u001b[0;31m# either boolean or fancy integer index\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2682\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2683\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2684\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_frame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_array\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2724\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2725\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2726\u001b[0;31m             \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_convert_to_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2727\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2728\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_convert_to_indexer\u001b[0;34m(self, obj, axis, is_setter)\u001b[0m\n\u001b[1;32m   1325\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1326\u001b[0m                     raise KeyError('{mask} not in index'\n\u001b[0;32m-> 1327\u001b[0;31m                                    .format(mask=objarr[mask]))\n\u001b[0m\u001b[1;32m   1328\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1329\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_values_from_object\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: \"['avg_incomes' 'cost_incomes'] not in index\""
     ]
    }
   ],
   "source": [
    "df[[\"avg_incomes\", \"cost_incomes\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>columns</th>\n",
       "      <th>city</th>\n",
       "      <th>population</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>number</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Beijing</td>\n",
       "      <td>2100</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Shanghai</td>\n",
       "      <td>2300</td>\n",
       "      <td>2017</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "columns      city  population  year\n",
       "number                             \n",
       "0         Beijing        2100  2016\n",
       "1        Shanghai        2300  2017"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "\"None of [['avg_incomes', 'cost_incomes']] are in the [columns]\"",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-102-85c64a3c6eec>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Beijing\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\"Shanghai\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"avg_incomes\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"cost_incomes\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   1470\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1471\u001b[0m                 \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1472\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1473\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1474\u001b[0m             \u001b[0;31m# we by definition only have the 0th axis\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_tuple\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m    888\u001b[0m                 \u001b[0;32mcontinue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    889\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 890\u001b[0;31m             \u001b[0mretval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    891\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    892\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mretval\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m   1899\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Cannot index with multidimensional key'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1900\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1901\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_iterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1902\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1903\u001b[0m             \u001b[0;31m# nested tuple slicing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_iterable\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m   1141\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mIndex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyarr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1142\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer_for\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1143\u001b[0;31m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_read_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1144\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1145\u001b[0m                 \u001b[0md\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyarr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_validate_read_indexer\u001b[0;34m(self, key, indexer, axis)\u001b[0m\n\u001b[1;32m   1204\u001b[0m                 raise KeyError(\n\u001b[1;32m   1205\u001b[0m                     u\"None of [{key}] are in the [{axis}]\".format(\n\u001b[0;32m-> 1206\u001b[0;31m                         key=key, axis=self.obj._get_axis_name(axis)))\n\u001b[0m\u001b[1;32m   1207\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1208\u001b[0m             \u001b[0;31m# we skip the warning on Categorical/Interval\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: \"None of [['avg_incomes', 'cost_incomes']] are in the [columns]\""
     ]
    }
   ],
   "source": [
    "df.loc[\"Beijing\":\"Shanghai\", [\"avg_incomes\", \"cost_incomes\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.iloc[1:3, 2:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.iloc[[1,3], 2:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DataFrame也可以用condition selection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.avg_incomes > 50000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df[df.avg_incomes > 50000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### [reindex](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把一个Series或者DataFrame按照新的index顺序进行重排"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "d    4.5\n",
       "b    2.6\n",
       "a   -1.8\n",
       "c    9.4\n",
       "dtype: float64"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj = pd.Series([4.5, 2.6, -1.8, 9.4], index=[\"d\", \"b\", \"a\", \"c\"])\n",
    "obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a   -1.8\n",
       "b    2.6\n",
       "c    9.4\n",
       "d    4.5\n",
       "e    NaN\n",
       "dtype: float64"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "obj.reindex([\"a\", \"b\", \"c\", \"d\", \"e\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj.reindex?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果我们reindex的index长度比原来的index长，可以指定方法来fill NaN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj.reindex([\"a\", \"b\", \"c\", \"d\", \"e\"], fill_value=obj.mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj3 = pd.Series([\"blue\", \"purple\", \"yello\"], index=[0,2,4])\n",
    "obj3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj3.reindex(range(6), fill_value=\"red\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj3.reindex(range(6), method=\"ffill\") # forward fill"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj3.reindex(range(6), method=\"bfill\") # backward fill"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "既然我们可以对Series进行reindex，相应地，我们也可以用同样的方法对DataFrame进行reindex。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'frame' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-53-37279ad81db3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mframe2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"one\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"three\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"four\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"eight\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mframe2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'frame' is not defined"
     ]
    }
   ],
   "source": [
    "frame2 = frame.reindex([\"one\", \"three\", \"four\", \"eight\"])\n",
    "frame2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "frame.reindex(columns=[\"city\", \"year\", \"population\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在reindex的同时，我们还可以重新指定columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面介绍如何用drop来删除Series和DataFrame中的index，注意drop的效果不是in place的，也就是说他会返回一个object，原来的Obejct并没有被改变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'obj3' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-54-be5c1a2ff875>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mobj4\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mobj4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'obj3' is not defined"
     ]
    }
   ],
   "source": [
    "obj4 = obj3.drop(4)\n",
    "obj4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "obj3.drop([2,4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "frame.drop([\"two\", \"four\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "frame.drop([\"debt\", \"year\"], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### hierarchical index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Series的hierarchical indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a  1   -0.811970\n",
       "   2    0.991725\n",
       "   3   -2.184027\n",
       "b  1    1.303909\n",
       "   2   -0.482150\n",
       "c  1    0.471532\n",
       "   2   -0.591226\n",
       "   3    0.037694\n",
       "d  1   -0.751281\n",
       "   2   -0.205790\n",
       "dtype: float64"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.Series(np.random.randn(10), index=\n",
    "                 [\n",
    "                  ['a','a','a','b','b','c','c','c','d','d'], \n",
    "                  [1,2,3,1,2,1,2,3,1,2]\n",
    "                 ])\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],\n",
       "           labels=[[0, 0, 0, 1, 1, 2, 2, 2, 3, 3], [0, 1, 2, 0, 1, 0, 1, 2, 0, 1]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    1.303909\n",
       "2   -0.482150\n",
       "dtype: float64"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['b']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data[\"b\":\"c\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "data[2:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "unstack和stack可以帮助我们在hierarchical indexing和DataFrame之间进行切换。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "type(data.unstack())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data.unstack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data.unstack().stack()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### DataFrame的hierarchical indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Beijing</th>\n",
       "      <th>Shanghai</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>avg_incomes</th>\n",
       "      <th>free_incomes</th>\n",
       "      <th>avg_incomes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">a</th>\n",
       "      <th>1</th>\n",
       "      <td>51665</td>\n",
       "      <td>48372</td>\n",
       "      <td>49022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>51648</td>\n",
       "      <td>51683</td>\n",
       "      <td>49657</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">b</th>\n",
       "      <th>1</th>\n",
       "      <td>49435</td>\n",
       "      <td>51275</td>\n",
       "      <td>51898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>49251</td>\n",
       "      <td>51032</td>\n",
       "      <td>51792</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Beijing                 Shanghai\n",
       "    avg_incomes free_incomes avg_incomes\n",
       "a 1       51665        48372       49022\n",
       "  2       51648        51683       49657\n",
       "b 1       49435        51275       51898\n",
       "  2       49251        51032       51792"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame = pd.DataFrame(np.random.randint(48000,52000,12).reshape((4,3)),\\\n",
    "                     index = [['a','a','b','b'], [1,2,1,2]],\\\n",
    "                    columns = [['Beijing', 'Beijing', 'Shanghai'], ['avg_incomes', 'free_incomes', 'avg_incomes']])\n",
    "frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    51665\n",
       "2    51648\n",
       "Name: avg_incomes, dtype: int64"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame.loc[\"a\" ][\"Beijing\"][\"avg_incomes\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "51648"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame.loc[\"a\",2][\"Beijing\"][\"avg_incomes\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2018七月在线 机器学习集训营 julyedu.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### csv文件读写"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [read_csv](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)\n",
    "- [to_csv](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "File b'GOOG.csv' does not exist",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-61-709ef97911b1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mgoog\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"GOOG.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mgoog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mparser_f\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, doublequote, delim_whitespace, low_memory, memory_map, float_precision)\u001b[0m\n\u001b[1;32m    676\u001b[0m                     skip_blank_lines=skip_blank_lines)\n\u001b[1;32m    677\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 678\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    679\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    680\u001b[0m     \u001b[0mparser_f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m    438\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    439\u001b[0m     \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 440\u001b[0;31m     \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    441\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    442\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m    785\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'has_index_names'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'has_index_names'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    786\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 787\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    788\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    789\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, engine)\u001b[0m\n\u001b[1;32m   1012\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'c'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1013\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'c'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1014\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCParserWrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1015\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1016\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'python'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.5/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, src, **kwds)\u001b[0m\n\u001b[1;32m   1706\u001b[0m         \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'usecols'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0musecols\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1707\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1708\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparsers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTextReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1709\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1710\u001b[0m         \u001b[0mpassed_names\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnames\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader.__cinit__\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader._setup_parser_source\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: File b'GOOG.csv' does not exist"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "goog = pd.read_csv(\"GOOG.csv\")\n",
    "goog.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把google的index设置成date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2004-08-19</th>\n",
       "      <td>49.813286</td>\n",
       "      <td>51.835709</td>\n",
       "      <td>47.800831</td>\n",
       "      <td>49.982655</td>\n",
       "      <td>49.982655</td>\n",
       "      <td>44871300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-08-20</th>\n",
       "      <td>50.316402</td>\n",
       "      <td>54.336334</td>\n",
       "      <td>50.062355</td>\n",
       "      <td>53.952770</td>\n",
       "      <td>53.952770</td>\n",
       "      <td>22942800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-08-23</th>\n",
       "      <td>55.168217</td>\n",
       "      <td>56.528118</td>\n",
       "      <td>54.321388</td>\n",
       "      <td>54.495735</td>\n",
       "      <td>54.495735</td>\n",
       "      <td>18342800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-08-24</th>\n",
       "      <td>55.412300</td>\n",
       "      <td>55.591629</td>\n",
       "      <td>51.591621</td>\n",
       "      <td>52.239193</td>\n",
       "      <td>52.239193</td>\n",
       "      <td>15319700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-08-25</th>\n",
       "      <td>52.284027</td>\n",
       "      <td>53.798351</td>\n",
       "      <td>51.746044</td>\n",
       "      <td>52.802086</td>\n",
       "      <td>52.802086</td>\n",
       "      <td>9232100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 Open       High        Low      Close  Adj Close    Volume\n",
       "Date                                                                       \n",
       "2004-08-19  49.813286  51.835709  47.800831  49.982655  49.982655  44871300\n",
       "2004-08-20  50.316402  54.336334  50.062355  53.952770  53.952770  22942800\n",
       "2004-08-23  55.168217  56.528118  54.321388  54.495735  54.495735  18342800\n",
       "2004-08-24  55.412300  55.591629  51.591621  52.239193  52.239193  15319700\n",
       "2004-08-25  52.284027  53.798351  51.746044  52.802086  52.802086   9232100"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "# goog = pd.read_csv(\"../../data/GOOG.csv\", index_col=0, parse_dates=[0])\n",
    "# goog = pd.read_csv(\"/home/hanxiaoyang/ml_jxy5/0.Teacher/data/GOOG.csv\", index_col=0, parse_dates=[0])\n",
    "goog = pd.read_csv(\"/home/hanxiaoyang/ml_jxy5/0.Teacher/data/../../0.Teacher/data/GOOG.csv\", index_col='Date',parse_dates=True)\n",
    "goog.head()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "!pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "goog.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "goog[\"Adj Close\"].plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "goog.tail(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 作图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f9ea9c80e10>"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(1000)*100, index=pd.date_range(\"1/1/2010\", periods=1000))\n",
    "ts = ts.cumsum()\n",
    "# help(ts.cumsum())\n",
    "ts.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts.cumsum?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "np.random.randn(1000, 4).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-01</th>\n",
       "      <td>0.349709</td>\n",
       "      <td>0.709237</td>\n",
       "      <td>0.806270</td>\n",
       "      <td>-0.992993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-02</th>\n",
       "      <td>0.727307</td>\n",
       "      <td>1.543172</td>\n",
       "      <td>0.478929</td>\n",
       "      <td>1.651380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-03</th>\n",
       "      <td>-0.557744</td>\n",
       "      <td>-0.522384</td>\n",
       "      <td>0.762209</td>\n",
       "      <td>-0.570227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-04</th>\n",
       "      <td>-0.781401</td>\n",
       "      <td>0.824561</td>\n",
       "      <td>0.813296</td>\n",
       "      <td>1.545141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-05</th>\n",
       "      <td>-1.299208</td>\n",
       "      <td>-1.704455</td>\n",
       "      <td>-0.707609</td>\n",
       "      <td>-0.654328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-06</th>\n",
       "      <td>0.225495</td>\n",
       "      <td>0.637909</td>\n",
       "      <td>-0.629292</td>\n",
       "      <td>-0.364940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-07</th>\n",
       "      <td>-0.406229</td>\n",
       "      <td>1.086392</td>\n",
       "      <td>0.756909</td>\n",
       "      <td>-1.782905</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-08</th>\n",
       "      <td>-0.351953</td>\n",
       "      <td>-1.869597</td>\n",
       "      <td>-2.046549</td>\n",
       "      <td>1.503778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-09</th>\n",
       "      <td>1.119626</td>\n",
       "      <td>-0.289440</td>\n",
       "      <td>1.294087</td>\n",
       "      <td>-0.456705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-10</th>\n",
       "      <td>-1.070200</td>\n",
       "      <td>0.204189</td>\n",
       "      <td>2.477216</td>\n",
       "      <td>-0.462226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-11</th>\n",
       "      <td>-0.455895</td>\n",
       "      <td>0.168838</td>\n",
       "      <td>1.200796</td>\n",
       "      <td>-1.552663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-12</th>\n",
       "      <td>-0.143460</td>\n",
       "      <td>-1.159459</td>\n",
       "      <td>-0.500524</td>\n",
       "      <td>-0.356523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-13</th>\n",
       "      <td>2.113319</td>\n",
       "      <td>1.805310</td>\n",
       "      <td>-0.170305</td>\n",
       "      <td>0.275225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-14</th>\n",
       "      <td>-0.450232</td>\n",
       "      <td>-2.037968</td>\n",
       "      <td>-1.426283</td>\n",
       "      <td>0.385707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-15</th>\n",
       "      <td>-1.043766</td>\n",
       "      <td>-0.500207</td>\n",
       "      <td>0.040890</td>\n",
       "      <td>-0.488382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-16</th>\n",
       "      <td>0.402299</td>\n",
       "      <td>-1.111420</td>\n",
       "      <td>1.303046</td>\n",
       "      <td>-1.122739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-17</th>\n",
       "      <td>-0.587034</td>\n",
       "      <td>0.869658</td>\n",
       "      <td>-0.116399</td>\n",
       "      <td>-0.544902</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-18</th>\n",
       "      <td>0.547990</td>\n",
       "      <td>0.396951</td>\n",
       "      <td>-1.399379</td>\n",
       "      <td>-1.409852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-19</th>\n",
       "      <td>-0.985279</td>\n",
       "      <td>-0.171925</td>\n",
       "      <td>2.089426</td>\n",
       "      <td>0.172387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-20</th>\n",
       "      <td>1.522885</td>\n",
       "      <td>0.682601</td>\n",
       "      <td>0.426298</td>\n",
       "      <td>-0.201606</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-21</th>\n",
       "      <td>-0.826405</td>\n",
       "      <td>0.269854</td>\n",
       "      <td>-1.022846</td>\n",
       "      <td>0.063345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-22</th>\n",
       "      <td>1.437237</td>\n",
       "      <td>0.530404</td>\n",
       "      <td>-0.146625</td>\n",
       "      <td>-0.411665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-23</th>\n",
       "      <td>1.332839</td>\n",
       "      <td>-0.395349</td>\n",
       "      <td>-0.881408</td>\n",
       "      <td>-0.558882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-24</th>\n",
       "      <td>-0.608321</td>\n",
       "      <td>0.464668</td>\n",
       "      <td>-1.303896</td>\n",
       "      <td>0.306876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-25</th>\n",
       "      <td>0.928690</td>\n",
       "      <td>-0.947682</td>\n",
       "      <td>-1.782486</td>\n",
       "      <td>0.765521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-26</th>\n",
       "      <td>-1.033044</td>\n",
       "      <td>0.550553</td>\n",
       "      <td>-1.266231</td>\n",
       "      <td>-0.204525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-27</th>\n",
       "      <td>1.074278</td>\n",
       "      <td>1.193364</td>\n",
       "      <td>-2.895333</td>\n",
       "      <td>-1.416051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-28</th>\n",
       "      <td>1.671709</td>\n",
       "      <td>0.553717</td>\n",
       "      <td>-0.110222</td>\n",
       "      <td>-1.245227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-29</th>\n",
       "      <td>0.229171</td>\n",
       "      <td>-1.108826</td>\n",
       "      <td>-0.027450</td>\n",
       "      <td>-0.973579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-30</th>\n",
       "      <td>1.972273</td>\n",
       "      <td>-0.070827</td>\n",
       "      <td>1.640378</td>\n",
       "      <td>-0.798764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-28</th>\n",
       "      <td>-0.689833</td>\n",
       "      <td>0.799763</td>\n",
       "      <td>-1.557474</td>\n",
       "      <td>-1.021118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-29</th>\n",
       "      <td>-0.814108</td>\n",
       "      <td>1.002710</td>\n",
       "      <td>-0.172471</td>\n",
       "      <td>-0.903547</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-30</th>\n",
       "      <td>-1.216997</td>\n",
       "      <td>1.373332</td>\n",
       "      <td>-1.142376</td>\n",
       "      <td>1.475620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-31</th>\n",
       "      <td>-1.655080</td>\n",
       "      <td>-0.668357</td>\n",
       "      <td>-1.018934</td>\n",
       "      <td>-0.752867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-01</th>\n",
       "      <td>0.900968</td>\n",
       "      <td>-0.939912</td>\n",
       "      <td>-1.583930</td>\n",
       "      <td>1.132540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-02</th>\n",
       "      <td>-1.016208</td>\n",
       "      <td>0.928808</td>\n",
       "      <td>1.009755</td>\n",
       "      <td>2.240552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-03</th>\n",
       "      <td>0.065379</td>\n",
       "      <td>-0.121097</td>\n",
       "      <td>-2.260644</td>\n",
       "      <td>0.532383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-04</th>\n",
       "      <td>1.052192</td>\n",
       "      <td>0.817374</td>\n",
       "      <td>-0.840022</td>\n",
       "      <td>-0.417497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-05</th>\n",
       "      <td>-1.971136</td>\n",
       "      <td>0.292220</td>\n",
       "      <td>-0.549869</td>\n",
       "      <td>-0.140360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-06</th>\n",
       "      <td>0.318510</td>\n",
       "      <td>0.132330</td>\n",
       "      <td>-1.174244</td>\n",
       "      <td>-0.993108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-07</th>\n",
       "      <td>-0.283869</td>\n",
       "      <td>1.115129</td>\n",
       "      <td>1.645454</td>\n",
       "      <td>0.887550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-08</th>\n",
       "      <td>-0.046978</td>\n",
       "      <td>-1.266263</td>\n",
       "      <td>-1.303922</td>\n",
       "      <td>1.829942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-09</th>\n",
       "      <td>-1.313513</td>\n",
       "      <td>0.095373</td>\n",
       "      <td>0.150328</td>\n",
       "      <td>-0.519082</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-10</th>\n",
       "      <td>0.122756</td>\n",
       "      <td>-0.463131</td>\n",
       "      <td>-0.287983</td>\n",
       "      <td>0.650344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-11</th>\n",
       "      <td>-0.478882</td>\n",
       "      <td>-0.221322</td>\n",
       "      <td>0.389185</td>\n",
       "      <td>0.251389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-12</th>\n",
       "      <td>2.263317</td>\n",
       "      <td>-0.484979</td>\n",
       "      <td>-0.464995</td>\n",
       "      <td>-0.503170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-13</th>\n",
       "      <td>0.215344</td>\n",
       "      <td>-0.403206</td>\n",
       "      <td>0.869923</td>\n",
       "      <td>-0.985307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-14</th>\n",
       "      <td>0.472658</td>\n",
       "      <td>0.685923</td>\n",
       "      <td>0.208342</td>\n",
       "      <td>0.082795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-15</th>\n",
       "      <td>-0.264874</td>\n",
       "      <td>0.420964</td>\n",
       "      <td>-1.278600</td>\n",
       "      <td>0.992407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-16</th>\n",
       "      <td>-0.002461</td>\n",
       "      <td>-0.469800</td>\n",
       "      <td>-0.995055</td>\n",
       "      <td>0.672135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-17</th>\n",
       "      <td>0.973395</td>\n",
       "      <td>-0.041868</td>\n",
       "      <td>-0.974791</td>\n",
       "      <td>0.053910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-18</th>\n",
       "      <td>-0.700167</td>\n",
       "      <td>0.388297</td>\n",
       "      <td>-0.857831</td>\n",
       "      <td>-0.587321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-19</th>\n",
       "      <td>-0.402236</td>\n",
       "      <td>-0.368393</td>\n",
       "      <td>0.288159</td>\n",
       "      <td>-1.426521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-20</th>\n",
       "      <td>-0.195250</td>\n",
       "      <td>0.093075</td>\n",
       "      <td>-1.729488</td>\n",
       "      <td>1.025160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-21</th>\n",
       "      <td>1.250523</td>\n",
       "      <td>0.242844</td>\n",
       "      <td>0.174887</td>\n",
       "      <td>0.203397</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-22</th>\n",
       "      <td>1.072818</td>\n",
       "      <td>1.712278</td>\n",
       "      <td>2.142496</td>\n",
       "      <td>0.434286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-23</th>\n",
       "      <td>0.772117</td>\n",
       "      <td>1.707677</td>\n",
       "      <td>0.906984</td>\n",
       "      <td>-0.564179</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-24</th>\n",
       "      <td>0.696084</td>\n",
       "      <td>-0.905117</td>\n",
       "      <td>0.937368</td>\n",
       "      <td>0.230347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-25</th>\n",
       "      <td>0.088625</td>\n",
       "      <td>1.165537</td>\n",
       "      <td>-0.465028</td>\n",
       "      <td>-1.216580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-26</th>\n",
       "      <td>1.434666</td>\n",
       "      <td>1.409556</td>\n",
       "      <td>0.592464</td>\n",
       "      <td>-0.632136</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2010-01-01  0.349709  0.709237  0.806270 -0.992993\n",
       "2010-01-02  0.727307  1.543172  0.478929  1.651380\n",
       "2010-01-03 -0.557744 -0.522384  0.762209 -0.570227\n",
       "2010-01-04 -0.781401  0.824561  0.813296  1.545141\n",
       "2010-01-05 -1.299208 -1.704455 -0.707609 -0.654328\n",
       "2010-01-06  0.225495  0.637909 -0.629292 -0.364940\n",
       "2010-01-07 -0.406229  1.086392  0.756909 -1.782905\n",
       "2010-01-08 -0.351953 -1.869597 -2.046549  1.503778\n",
       "2010-01-09  1.119626 -0.289440  1.294087 -0.456705\n",
       "2010-01-10 -1.070200  0.204189  2.477216 -0.462226\n",
       "2010-01-11 -0.455895  0.168838  1.200796 -1.552663\n",
       "2010-01-12 -0.143460 -1.159459 -0.500524 -0.356523\n",
       "2010-01-13  2.113319  1.805310 -0.170305  0.275225\n",
       "2010-01-14 -0.450232 -2.037968 -1.426283  0.385707\n",
       "2010-01-15 -1.043766 -0.500207  0.040890 -0.488382\n",
       "2010-01-16  0.402299 -1.111420  1.303046 -1.122739\n",
       "2010-01-17 -0.587034  0.869658 -0.116399 -0.544902\n",
       "2010-01-18  0.547990  0.396951 -1.399379 -1.409852\n",
       "2010-01-19 -0.985279 -0.171925  2.089426  0.172387\n",
       "2010-01-20  1.522885  0.682601  0.426298 -0.201606\n",
       "2010-01-21 -0.826405  0.269854 -1.022846  0.063345\n",
       "2010-01-22  1.437237  0.530404 -0.146625 -0.411665\n",
       "2010-01-23  1.332839 -0.395349 -0.881408 -0.558882\n",
       "2010-01-24 -0.608321  0.464668 -1.303896  0.306876\n",
       "2010-01-25  0.928690 -0.947682 -1.782486  0.765521\n",
       "2010-01-26 -1.033044  0.550553 -1.266231 -0.204525\n",
       "2010-01-27  1.074278  1.193364 -2.895333 -1.416051\n",
       "2010-01-28  1.671709  0.553717 -0.110222 -1.245227\n",
       "2010-01-29  0.229171 -1.108826 -0.027450 -0.973579\n",
       "2010-01-30  1.972273 -0.070827  1.640378 -0.798764\n",
       "...              ...       ...       ...       ...\n",
       "2012-08-28 -0.689833  0.799763 -1.557474 -1.021118\n",
       "2012-08-29 -0.814108  1.002710 -0.172471 -0.903547\n",
       "2012-08-30 -1.216997  1.373332 -1.142376  1.475620\n",
       "2012-08-31 -1.655080 -0.668357 -1.018934 -0.752867\n",
       "2012-09-01  0.900968 -0.939912 -1.583930  1.132540\n",
       "2012-09-02 -1.016208  0.928808  1.009755  2.240552\n",
       "2012-09-03  0.065379 -0.121097 -2.260644  0.532383\n",
       "2012-09-04  1.052192  0.817374 -0.840022 -0.417497\n",
       "2012-09-05 -1.971136  0.292220 -0.549869 -0.140360\n",
       "2012-09-06  0.318510  0.132330 -1.174244 -0.993108\n",
       "2012-09-07 -0.283869  1.115129  1.645454  0.887550\n",
       "2012-09-08 -0.046978 -1.266263 -1.303922  1.829942\n",
       "2012-09-09 -1.313513  0.095373  0.150328 -0.519082\n",
       "2012-09-10  0.122756 -0.463131 -0.287983  0.650344\n",
       "2012-09-11 -0.478882 -0.221322  0.389185  0.251389\n",
       "2012-09-12  2.263317 -0.484979 -0.464995 -0.503170\n",
       "2012-09-13  0.215344 -0.403206  0.869923 -0.985307\n",
       "2012-09-14  0.472658  0.685923  0.208342  0.082795\n",
       "2012-09-15 -0.264874  0.420964 -1.278600  0.992407\n",
       "2012-09-16 -0.002461 -0.469800 -0.995055  0.672135\n",
       "2012-09-17  0.973395 -0.041868 -0.974791  0.053910\n",
       "2012-09-18 -0.700167  0.388297 -0.857831 -0.587321\n",
       "2012-09-19 -0.402236 -0.368393  0.288159 -1.426521\n",
       "2012-09-20 -0.195250  0.093075 -1.729488  1.025160\n",
       "2012-09-21  1.250523  0.242844  0.174887  0.203397\n",
       "2012-09-22  1.072818  1.712278  2.142496  0.434286\n",
       "2012-09-23  0.772117  1.707677  0.906984 -0.564179\n",
       "2012-09-24  0.696084 -0.905117  0.937368  0.230347\n",
       "2012-09-25  0.088625  1.165537 -0.465028 -1.216580\n",
       "2012-09-26  1.434666  1.409556  0.592464 -0.632136\n",
       "\n",
       "[1000 rows x 4 columns]"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list(\"ABCD\"))\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f9ea9bfe390>"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-01</th>\n",
       "      <td>0.349709</td>\n",
       "      <td>0.709237</td>\n",
       "      <td>0.806270</td>\n",
       "      <td>-0.992993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-02</th>\n",
       "      <td>1.077016</td>\n",
       "      <td>2.252409</td>\n",
       "      <td>1.285199</td>\n",
       "      <td>0.658387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-03</th>\n",
       "      <td>0.519272</td>\n",
       "      <td>1.730025</td>\n",
       "      <td>2.047408</td>\n",
       "      <td>0.088160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-04</th>\n",
       "      <td>-0.262129</td>\n",
       "      <td>2.554587</td>\n",
       "      <td>2.860704</td>\n",
       "      <td>1.633301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-05</th>\n",
       "      <td>-1.561337</td>\n",
       "      <td>0.850132</td>\n",
       "      <td>2.153095</td>\n",
       "      <td>0.978974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-06</th>\n",
       "      <td>-1.335842</td>\n",
       "      <td>1.488041</td>\n",
       "      <td>1.523803</td>\n",
       "      <td>0.614033</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-07</th>\n",
       "      <td>-1.742070</td>\n",
       "      <td>2.574433</td>\n",
       "      <td>2.280712</td>\n",
       "      <td>-1.168872</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-08</th>\n",
       "      <td>-2.094023</td>\n",
       "      <td>0.704836</td>\n",
       "      <td>0.234163</td>\n",
       "      <td>0.334907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-09</th>\n",
       "      <td>-0.974398</td>\n",
       "      <td>0.415396</td>\n",
       "      <td>1.528250</td>\n",
       "      <td>-0.121799</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-10</th>\n",
       "      <td>-2.044598</td>\n",
       "      <td>0.619585</td>\n",
       "      <td>4.005467</td>\n",
       "      <td>-0.584024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-11</th>\n",
       "      <td>-2.500493</td>\n",
       "      <td>0.788422</td>\n",
       "      <td>5.206263</td>\n",
       "      <td>-2.136687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-12</th>\n",
       "      <td>-2.643952</td>\n",
       "      <td>-0.371037</td>\n",
       "      <td>4.705739</td>\n",
       "      <td>-2.493210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-13</th>\n",
       "      <td>-0.530633</td>\n",
       "      <td>1.434274</td>\n",
       "      <td>4.535435</td>\n",
       "      <td>-2.217984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-14</th>\n",
       "      <td>-0.980865</td>\n",
       "      <td>-0.603695</td>\n",
       "      <td>3.109152</td>\n",
       "      <td>-1.832277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-15</th>\n",
       "      <td>-2.024631</td>\n",
       "      <td>-1.103902</td>\n",
       "      <td>3.150042</td>\n",
       "      <td>-2.320660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-16</th>\n",
       "      <td>-1.622333</td>\n",
       "      <td>-2.215322</td>\n",
       "      <td>4.453088</td>\n",
       "      <td>-3.443399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-17</th>\n",
       "      <td>-2.209367</td>\n",
       "      <td>-1.345663</td>\n",
       "      <td>4.336689</td>\n",
       "      <td>-3.988301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-18</th>\n",
       "      <td>-1.661377</td>\n",
       "      <td>-0.948712</td>\n",
       "      <td>2.937309</td>\n",
       "      <td>-5.398153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-19</th>\n",
       "      <td>-2.646656</td>\n",
       "      <td>-1.120637</td>\n",
       "      <td>5.026735</td>\n",
       "      <td>-5.225766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-20</th>\n",
       "      <td>-1.123771</td>\n",
       "      <td>-0.438035</td>\n",
       "      <td>5.453034</td>\n",
       "      <td>-5.427372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-21</th>\n",
       "      <td>-1.950175</td>\n",
       "      <td>-0.168182</td>\n",
       "      <td>4.430188</td>\n",
       "      <td>-5.364027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-22</th>\n",
       "      <td>-0.512939</td>\n",
       "      <td>0.362223</td>\n",
       "      <td>4.283562</td>\n",
       "      <td>-5.775692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-23</th>\n",
       "      <td>0.819900</td>\n",
       "      <td>-0.033126</td>\n",
       "      <td>3.402154</td>\n",
       "      <td>-6.334574</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-24</th>\n",
       "      <td>0.211579</td>\n",
       "      <td>0.431542</td>\n",
       "      <td>2.098258</td>\n",
       "      <td>-6.027698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-25</th>\n",
       "      <td>1.140270</td>\n",
       "      <td>-0.516140</td>\n",
       "      <td>0.315771</td>\n",
       "      <td>-5.262177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-26</th>\n",
       "      <td>0.107226</td>\n",
       "      <td>0.034413</td>\n",
       "      <td>-0.950459</td>\n",
       "      <td>-5.466702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-27</th>\n",
       "      <td>1.181504</td>\n",
       "      <td>1.227777</td>\n",
       "      <td>-3.845792</td>\n",
       "      <td>-6.882753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-28</th>\n",
       "      <td>2.853213</td>\n",
       "      <td>1.781495</td>\n",
       "      <td>-3.956014</td>\n",
       "      <td>-8.127980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-29</th>\n",
       "      <td>3.082384</td>\n",
       "      <td>0.672669</td>\n",
       "      <td>-3.983464</td>\n",
       "      <td>-9.101559</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-30</th>\n",
       "      <td>5.054656</td>\n",
       "      <td>0.601841</td>\n",
       "      <td>-2.343086</td>\n",
       "      <td>-9.900323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-28</th>\n",
       "      <td>25.798470</td>\n",
       "      <td>-51.051370</td>\n",
       "      <td>12.070398</td>\n",
       "      <td>-66.013864</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-29</th>\n",
       "      <td>24.984363</td>\n",
       "      <td>-50.048660</td>\n",
       "      <td>11.897926</td>\n",
       "      <td>-66.917411</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-30</th>\n",
       "      <td>23.767365</td>\n",
       "      <td>-48.675327</td>\n",
       "      <td>10.755550</td>\n",
       "      <td>-65.441791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-08-31</th>\n",
       "      <td>22.112285</td>\n",
       "      <td>-49.343684</td>\n",
       "      <td>9.736616</td>\n",
       "      <td>-66.194658</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-01</th>\n",
       "      <td>23.013253</td>\n",
       "      <td>-50.283596</td>\n",
       "      <td>8.152686</td>\n",
       "      <td>-65.062118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-02</th>\n",
       "      <td>21.997045</td>\n",
       "      <td>-49.354788</td>\n",
       "      <td>9.162441</td>\n",
       "      <td>-62.821566</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-03</th>\n",
       "      <td>22.062424</td>\n",
       "      <td>-49.475885</td>\n",
       "      <td>6.901796</td>\n",
       "      <td>-62.289183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-04</th>\n",
       "      <td>23.114616</td>\n",
       "      <td>-48.658511</td>\n",
       "      <td>6.061774</td>\n",
       "      <td>-62.706680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-05</th>\n",
       "      <td>21.143480</td>\n",
       "      <td>-48.366291</td>\n",
       "      <td>5.511905</td>\n",
       "      <td>-62.847040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-06</th>\n",
       "      <td>21.461990</td>\n",
       "      <td>-48.233961</td>\n",
       "      <td>4.337661</td>\n",
       "      <td>-63.840148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-07</th>\n",
       "      <td>21.178121</td>\n",
       "      <td>-47.118832</td>\n",
       "      <td>5.983115</td>\n",
       "      <td>-62.952599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-08</th>\n",
       "      <td>21.131143</td>\n",
       "      <td>-48.385095</td>\n",
       "      <td>4.679193</td>\n",
       "      <td>-61.122656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-09</th>\n",
       "      <td>19.817631</td>\n",
       "      <td>-48.289722</td>\n",
       "      <td>4.829521</td>\n",
       "      <td>-61.641738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-10</th>\n",
       "      <td>19.940387</td>\n",
       "      <td>-48.752853</td>\n",
       "      <td>4.541537</td>\n",
       "      <td>-60.991394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-11</th>\n",
       "      <td>19.461504</td>\n",
       "      <td>-48.974175</td>\n",
       "      <td>4.930722</td>\n",
       "      <td>-60.740005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-12</th>\n",
       "      <td>21.724821</td>\n",
       "      <td>-49.459153</td>\n",
       "      <td>4.465727</td>\n",
       "      <td>-61.243174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-13</th>\n",
       "      <td>21.940165</td>\n",
       "      <td>-49.862359</td>\n",
       "      <td>5.335650</td>\n",
       "      <td>-62.228482</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-14</th>\n",
       "      <td>22.412822</td>\n",
       "      <td>-49.176436</td>\n",
       "      <td>5.543992</td>\n",
       "      <td>-62.145687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-15</th>\n",
       "      <td>22.147949</td>\n",
       "      <td>-48.755472</td>\n",
       "      <td>4.265392</td>\n",
       "      <td>-61.153280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-16</th>\n",
       "      <td>22.145488</td>\n",
       "      <td>-49.225272</td>\n",
       "      <td>3.270337</td>\n",
       "      <td>-60.481145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-17</th>\n",
       "      <td>23.118883</td>\n",
       "      <td>-49.267140</td>\n",
       "      <td>2.295546</td>\n",
       "      <td>-60.427235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-18</th>\n",
       "      <td>22.418716</td>\n",
       "      <td>-48.878843</td>\n",
       "      <td>1.437715</td>\n",
       "      <td>-61.014556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-19</th>\n",
       "      <td>22.016480</td>\n",
       "      <td>-49.247236</td>\n",
       "      <td>1.725874</td>\n",
       "      <td>-62.441077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-20</th>\n",
       "      <td>21.821230</td>\n",
       "      <td>-49.154161</td>\n",
       "      <td>-0.003614</td>\n",
       "      <td>-61.415917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-21</th>\n",
       "      <td>23.071753</td>\n",
       "      <td>-48.911317</td>\n",
       "      <td>0.171273</td>\n",
       "      <td>-61.212520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-22</th>\n",
       "      <td>24.144571</td>\n",
       "      <td>-47.199038</td>\n",
       "      <td>2.313769</td>\n",
       "      <td>-60.778234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-23</th>\n",
       "      <td>24.916688</td>\n",
       "      <td>-45.491361</td>\n",
       "      <td>3.220753</td>\n",
       "      <td>-61.342413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-24</th>\n",
       "      <td>25.612772</td>\n",
       "      <td>-46.396478</td>\n",
       "      <td>4.158122</td>\n",
       "      <td>-61.112066</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-25</th>\n",
       "      <td>25.701397</td>\n",
       "      <td>-45.230941</td>\n",
       "      <td>3.693094</td>\n",
       "      <td>-62.328646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-09-26</th>\n",
       "      <td>27.136063</td>\n",
       "      <td>-43.821385</td>\n",
       "      <td>4.285559</td>\n",
       "      <td>-62.960782</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    A          B          C          D\n",
       "2010-01-01   0.349709   0.709237   0.806270  -0.992993\n",
       "2010-01-02   1.077016   2.252409   1.285199   0.658387\n",
       "2010-01-03   0.519272   1.730025   2.047408   0.088160\n",
       "2010-01-04  -0.262129   2.554587   2.860704   1.633301\n",
       "2010-01-05  -1.561337   0.850132   2.153095   0.978974\n",
       "2010-01-06  -1.335842   1.488041   1.523803   0.614033\n",
       "2010-01-07  -1.742070   2.574433   2.280712  -1.168872\n",
       "2010-01-08  -2.094023   0.704836   0.234163   0.334907\n",
       "2010-01-09  -0.974398   0.415396   1.528250  -0.121799\n",
       "2010-01-10  -2.044598   0.619585   4.005467  -0.584024\n",
       "2010-01-11  -2.500493   0.788422   5.206263  -2.136687\n",
       "2010-01-12  -2.643952  -0.371037   4.705739  -2.493210\n",
       "2010-01-13  -0.530633   1.434274   4.535435  -2.217984\n",
       "2010-01-14  -0.980865  -0.603695   3.109152  -1.832277\n",
       "2010-01-15  -2.024631  -1.103902   3.150042  -2.320660\n",
       "2010-01-16  -1.622333  -2.215322   4.453088  -3.443399\n",
       "2010-01-17  -2.209367  -1.345663   4.336689  -3.988301\n",
       "2010-01-18  -1.661377  -0.948712   2.937309  -5.398153\n",
       "2010-01-19  -2.646656  -1.120637   5.026735  -5.225766\n",
       "2010-01-20  -1.123771  -0.438035   5.453034  -5.427372\n",
       "2010-01-21  -1.950175  -0.168182   4.430188  -5.364027\n",
       "2010-01-22  -0.512939   0.362223   4.283562  -5.775692\n",
       "2010-01-23   0.819900  -0.033126   3.402154  -6.334574\n",
       "2010-01-24   0.211579   0.431542   2.098258  -6.027698\n",
       "2010-01-25   1.140270  -0.516140   0.315771  -5.262177\n",
       "2010-01-26   0.107226   0.034413  -0.950459  -5.466702\n",
       "2010-01-27   1.181504   1.227777  -3.845792  -6.882753\n",
       "2010-01-28   2.853213   1.781495  -3.956014  -8.127980\n",
       "2010-01-29   3.082384   0.672669  -3.983464  -9.101559\n",
       "2010-01-30   5.054656   0.601841  -2.343086  -9.900323\n",
       "...               ...        ...        ...        ...\n",
       "2012-08-28  25.798470 -51.051370  12.070398 -66.013864\n",
       "2012-08-29  24.984363 -50.048660  11.897926 -66.917411\n",
       "2012-08-30  23.767365 -48.675327  10.755550 -65.441791\n",
       "2012-08-31  22.112285 -49.343684   9.736616 -66.194658\n",
       "2012-09-01  23.013253 -50.283596   8.152686 -65.062118\n",
       "2012-09-02  21.997045 -49.354788   9.162441 -62.821566\n",
       "2012-09-03  22.062424 -49.475885   6.901796 -62.289183\n",
       "2012-09-04  23.114616 -48.658511   6.061774 -62.706680\n",
       "2012-09-05  21.143480 -48.366291   5.511905 -62.847040\n",
       "2012-09-06  21.461990 -48.233961   4.337661 -63.840148\n",
       "2012-09-07  21.178121 -47.118832   5.983115 -62.952599\n",
       "2012-09-08  21.131143 -48.385095   4.679193 -61.122656\n",
       "2012-09-09  19.817631 -48.289722   4.829521 -61.641738\n",
       "2012-09-10  19.940387 -48.752853   4.541537 -60.991394\n",
       "2012-09-11  19.461504 -48.974175   4.930722 -60.740005\n",
       "2012-09-12  21.724821 -49.459153   4.465727 -61.243174\n",
       "2012-09-13  21.940165 -49.862359   5.335650 -62.228482\n",
       "2012-09-14  22.412822 -49.176436   5.543992 -62.145687\n",
       "2012-09-15  22.147949 -48.755472   4.265392 -61.153280\n",
       "2012-09-16  22.145488 -49.225272   3.270337 -60.481145\n",
       "2012-09-17  23.118883 -49.267140   2.295546 -60.427235\n",
       "2012-09-18  22.418716 -48.878843   1.437715 -61.014556\n",
       "2012-09-19  22.016480 -49.247236   1.725874 -62.441077\n",
       "2012-09-20  21.821230 -49.154161  -0.003614 -61.415917\n",
       "2012-09-21  23.071753 -48.911317   0.171273 -61.212520\n",
       "2012-09-22  24.144571 -47.199038   2.313769 -60.778234\n",
       "2012-09-23  24.916688 -45.491361   3.220753 -61.342413\n",
       "2012-09-24  25.612772 -46.396478   4.158122 -61.112066\n",
       "2012-09-25  25.701397 -45.230941   3.693094 -62.328646\n",
       "2012-09-26  27.136063 -43.821385   4.285559 -62.960782\n",
       "\n",
       "[1000 rows x 4 columns]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.cumsum()\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f9ea9b4eb00>"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.cumsum?\n",
    "pd.DataFrame(pd.Series([1,1,1,1])).cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv('../data/sample.tsv', sep=\"\\t\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.read_csv(\"../data/sample.tsv\", sep=\"\\t\", index_col=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 作业\n",
    "***\n",
    "/exercise/下"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
